[c]关于进制转换的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 05:56:36
main()
{char *p,s[6];
int n;
p=s
gets(p);
n=*p-'0';
while(*(++p)!='\0')
n=n*8+*p-'0';
printf("%d\n",n);
}
请问倒数第四行的-'0'是什么意思 为什么要减这个?
还有 如果十六进制转换成十进制时 输入abc...这些字母时系统认吗?应该加一些什么语句?

将*p中保存的字符转换为对应的数字

ASCII码中0为48,1为49,....以此类推,可以用printf("%d",*p)查看。
字符'0'+'1'在c中会先被转换成ASCII码再相加,即48+49,为了实现'0'+'1',可以先对字符'0'和'1'减48,即为数字的0和1,然后再计算。而字符'0'为48

数字的ascii 转换为 数字

十六进制,当然认的